package com.zenith.storage.service;

import com.zenith.common.result.PageResult;
import com.zenith.storage.po.dto.FileQueryDTO;
import com.zenith.storage.po.dto.UploadInitDTO;
import com.zenith.storage.po.vo.FileVO;
import com.zenith.storage.po.vo.UploadInitVO;
import org.springframework.web.multipart.MultipartFile;

import jakarta.servlet.http.HttpServletResponse;

/**
 * 文件管理服务接口
 */
public interface StorageFileService {
    /**
     * 初始化上传
     * @param uploadInitDTO 上传初始化信息
     * @return 上传初始化结果
     */
    UploadInitVO initUpload(UploadInitDTO uploadInitDTO);

    /**
     * 上传文件
     * @param file 文件
     * @param uploadInitVO 上传初始化信息
     * @return 文件信息
     */
    FileVO uploadFile(MultipartFile file, UploadInitVO uploadInitVO);

    /**
     * 下载文件
     * @param fileId 文件ID
     * @param response 响应对象
     */
    void downloadFile(Long fileId, HttpServletResponse response);

    /**
     * 删除文件
     * @param fileId 文件ID
     * @return 是否删除成功
     */
    Boolean deleteFile(Long fileId);

    /**
     * 获取文件详情
     * @param fileId 文件ID
     * @return 文件详情
     */
    FileVO getFileDetail(Long fileId);

    /**
     * 分页查询文件列表
     * @param queryDTO 查询条件
     * @return 文件列表
     */
    PageResult<FileVO> listFiles(FileQueryDTO queryDTO);
}